package cn.it.xiaohan.note.service;

import cn.hutool.core.util.StrUtil;
import cn.it.xiaohan.note.dao.NoteTypeDao;
import cn.it.xiaohan.note.po.NoteType;
import cn.it.xiaohan.note.vo.NoteVo;
import cn.it.xiaohan.note.vo.ResultInfo;

import java.util.List;

public class NoteTypeService {

    private NoteTypeDao typeDao = new NoteTypeDao();

    public List<NoteType> findTypeByUserId(Integer userId) {
        // 调用Dao层方法，根据用户ID查询用户列表
        List<NoteType> typeList = typeDao.findTypeByUserId(userId);
        // 返回类型列表
        return typeList;
    }

    public ResultInfo<NoteType> deleteType(String typeId) {
        ResultInfo<NoteType> resultInfo = new ResultInfo<>();
        // 判断参数是否为空
        if (StrUtil.isBlank(typeId)){
            resultInfo.setCode(0);
            resultInfo.setMsg("系统异常，请稍后重试！！！");
            return resultInfo;
        }

         // 程序走到此处说明typeId不为空,那么我们去调用dao层方法通过typeId去查询该类型下是否存在云记
        long num = typeDao.findNoteByTypeId(typeId);

        // 如果num > 0 说明该类型下存在云记 不可删除
        if (num > 0){
            resultInfo.setCode(0);
            resultInfo.setMsg("该类型下已经存在云记，暂时不支持删除");
            return resultInfo;
        }

        // 程序走到这里说明该类型下不存在云记，那么我们就调用dao层删除方法通过ID删除即可，返回受影响的行数
        int row = typeDao.deleteTypeById(typeId);

        // 如果说受影响的行数大于0，说明删除成功，反之则删除失败
        if (row > 0){
            resultInfo.setCode(1);
        }else{
            resultInfo.setCode(0);
            resultInfo.setMsg("删除失败，请稍后重试！！！");
        }
        return resultInfo;
    }

    /**
     * 添加或者修改操作
     * @param typeId
     * @param typeName
     * @param userId
     * @return
     */
    public ResultInfo<Integer> addOrUpdateType(String typeId, String typeName, Integer userId) {
        ResultInfo<Integer> resultInfo = new ResultInfo<>();

        // 判断参数是否为空
        if (StrUtil.isBlank(typeName)){
            resultInfo.setCode(0);
            resultInfo.setMsg("类型名称不能为空");
            return resultInfo;
        }

        // c程序执行到此处说明 类型名称不为空，那么就去检验类型名称的唯一性,返回0或者1 0：表示不可用，1：表示可用
        Integer code = typeDao.checkTypeName(typeName,userId,typeId);

        if (code == 0){
            resultInfo.setCode(0);
            resultInfo.setMsg("类型名称已存在，换一个吧");
            return resultInfo;
        }

        // 说明类型名称可以用
        Integer key = null;
        if (StrUtil.isBlank(typeId)){
            // 如果typeId是空，那么我们做的就是添加操作
            key = typeDao.addType(typeName,userId);
        }else{
            // 如果typeId不是空，我们做的就是修改操作
            key = typeDao.updateType(typeName,typeId);
        }

        if (key > 0){
            resultInfo.setCode(1);
            resultInfo.setResult(key);
        }else {
            resultInfo.setCode(0);
            resultInfo.setMsg("更新失败，请稍后重试！！！");
        }
       return resultInfo;
    }
}
